package com.mlh.requestparam;

import com.mlh.entity.Master;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;

import java.util.Map;

@RequestMapping("/vote")
@Controller
public class VoteHandler {
// 获取到超链接传递的数据
    /**
     * 老韩解读 @RequestParam(value="name", required=false)
     * 1.@RequestParam : 表示说明一个接受到的参数
     * 2.value="name" : 接收的参数名是 name
     * 3.required=false : 表示该参数可以有，也可以没有 ,如果 required=true,表示必须传递该参数.
     *  默认是 required=true
     *  利用@RequestParam 就可以实现请求的参数名和方法的参数名可以不一致
     */
    @RequestMapping(value = "/vote01")
    public String test01(@RequestParam(value = "name", required = false)
                         String username) {
        System.out.println("得到的 username= " + username);
        // 返回到一个结果
        return "success";
    }

    @RequestMapping("/vote02")
    //1. springmvc 会自动把获取的 model 模型，放入到 request 域中，名字就是 master
    //2. 也可以手动将 master 放入到 request
    //request.setAttribute("master", master); 这里的“master”是类名首字母小写，而不是参数名，
    //如果参数为Master master01  在request中仍然是 master
    // 值得注意的是 方法里的master 和 request中的master 并不指向同一个对象 而是指向各自的对象
    public String test02( Map<String, Object> map,Master master){
        //1.需求是通过map对象，添加属性到request中
        //2.原理分析: springmvc 会遍历map，看看有没有在jsp出现的参数，如果有,将map的k-V，存放到request域
        map.put("address","xiamen");
        //map.put("master",null); //这一操作可以对request域中的master重新赋值，赋值为null
        return "model_data_ok";
    }

    @ModelAttribute
    public void prepareModel(){
        System. out . println("prepareModel()-----完成准备工作-----");
    }

}
